package com.rs.util;

import java.time.Instant;
import java.time.LocalDate;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.Optional;

/**
 * 
 * 描述：string转date的工具类
 * 
 * @author：fjc
 * @date 2020年7月16日
 * @version:1.0
 */
public class TimeTypeConversionUtil {
	public static Date getDateByString(String time) {
		String type = null;//格式化的类型
		if (time.contains("-")) {//是否包含“-”
			type = "yyyy-MM-dd";
		} else {
			type = "yyyy/MM/dd";
		}

		//java8的新特性 解析和格式化日期或时间
		DateTimeFormatter fmt = DateTimeFormatter.ofPattern(type);
		//表示没有时区的日期时间, LocalDate是不可变并且线程安全的
		LocalDate localDate = LocalDate.parse(time, fmt);
		//时区ID，用来确定Instant和LocalDateTime互相转换的规则
		ZoneId zone = ZoneId.systemDefault();
		//用来表示时间线上的一个点（瞬时）
		Instant instant = localDate.atStartOfDay(zone).toInstant();
		return Date.from(instant);
	}

	/**
	 * 
	 * @MethodName: getMonthDate
	 * @Description:得到date类型的月份
	 * @author：fjc
	 * @date 2020-07-27 11:34:02 
	 * @return Date
	 */
	public static Date getMonthDate() {
		YearMonth yearMonth = YearMonth.now();
		//表示没有时区的日期时间, LocalDate是不可变并且线程安全的
		LocalDate localDate = LocalDate.of(yearMonth.getYear(), yearMonth.getMonth(), 1);
		//时区ID，用来确定Instant和LocalDateTime互相转换的规则
		ZoneId zone = ZoneId.systemDefault();
		//用来表示时间线上的一个点（瞬时）
		Instant instant = localDate.atStartOfDay(zone).toInstant();
		return Date.from(instant);
	}

	/**
	 * 
	 * @MethodName: conversionTime
	 * @Description: 初始化时间
	 * @author：fjc
	 * @date 2020-07-30 08:59:27 
	 * @param time
	 * @return Date
	 */
	public static Date conversionTime(Date time) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(time);
		LocalDate localDate = LocalDate.of(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, 1);
		//时区ID，用来确定Instant和LocalDateTime互相转换的规则
		ZoneId zone = ZoneId.systemDefault();
		//用来表示时间线上的一个点（瞬时）
		Instant instant = localDate.atStartOfDay(zone).toInstant();
		return Date.from(instant);
	}

	/**
	 * 
	 * @MethodName: getYearMonth
	 * @Description: 将日期转成年月的字符串
	 * @author：fjc
	 * @date 2020-07-30 09:12:28 
	 * @param date
	 * @return String
	 */
	public static String getYearMonth(Date date) {
		//将 Instant 转换为 LocalDate ，然后使用 YearMonth.from（TemporalAccessor） -method
		LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
		YearMonth yearMonth = YearMonth.from(localDate);
		return yearMonth.toString();
	}

	/**
	 * 
	 * @MethodName: getTimeString
	 * @Description: 格式化当前时间
	 * @author：fjc
	 * @date 2020-08-04 10:46:38 
	 * @return String
	 */
	public static String getTimeString(String type) {
		LocalDate localDate = LocalDate.now();
		//java8的新特性 解析和格式化日期或时间
		DateTimeFormatter fmt = DateTimeFormatter.ofPattern(type);
		return fmt.format(localDate);
	}

	public static String getStringDate(Date time) {
		if (Optional.ofNullable(time).isPresent()) {

			//java8的新特性 解析和格式化日期或时间
			DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
			Instant instant = time.toInstant();
			ZoneId zoneId = ZoneId.systemDefault();
			// atZone()方法返回在指定时区从此Instant生成的ZonedDateTime。
			LocalDate localDate = instant.atZone(zoneId).toLocalDate();
			return fmt.format(localDate);
		} else {
			return "";
		}
	}

}
